<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数的修改</title>
    <script>
        /* 构造函数的修改 */

        /* 
        在Person构造函数中，为每一个对象都添加了一个sayName方法
            目前该方法是构造函数是在函数内部创建的
            也就是构造函数每执行一次都会创建一个sayName方法
            也是所有实例的sayName都是唯一的
            这样就导致构造函数没执行一次都会创建一个新的方法
            每次创建的方法都是一样的（完全没有必要）
            可以使所有对象共享同一个方法

        */
        //创建一个Person构造函数
        function Person(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
            //将方法赋值给this.sayName
            //this.sayName = fun;

        }

        //将构造函数的方法在全局中定义
        /* 
        将函数定义在全局作用域中，污染了全局作用域的命名空间
        关键是定义在全局作用域中很不安全
        */
        //向原型中添加sayName方法
        Person.prototype.sayName = function() {
            console.log("我是：" + this.name);
        }

        /* function fun() {
            console.log("我是:" + this.name);
        } */

        //创建一个Person实例
        var per = new Person("孙悟空", 12, "男");
        var per1 = new Person("猪八戒", 41, "男");
        /* per.sayName();
        per1.sayName(); */

        console.log(per.sayName() == per1.sayName());
    </script>

</head>

<body>

</body>

</html>